#ifndef						GOBAN_HH_
# define					GOBAN_HH_

# include					<vector>
# include					<map>
# include					<utility>
# include					"APlayer.hpp"
# include					"Human.hpp"
# include					"IA.hpp"
# include					"Arbitre.hpp"
# include					"Macro.hpp"


class 						Goban
{
private:
	//						Attributes
	int						_turn;
	std::vector<APlayer*>	_players;
	Arbitre					*_arbitre;
	bool 					_gameType;
	char					_winner;
	std::map<int, Square*>  &_squareMap;
	Box						*_mapInfo;

public:
	//						Ctor-Dtor
	Goban(std::map<int, Square*> &map);
	Goban(const Goban &other);
	virtual ~Goban();
			
	//						Functions
	void					putStone(int key);
	void					removeStone(int key);
	void					playersTurn(int key);
	void					checkCoordsValidity(int key);
	void					init(char type);
	void					buildMap();
	void					display();				
	
	//						Getters
	char		const		getGameType() const;
	
	std::map<int, Square*>  &getSquareMap();
	Box						&getSquareInfo(int key);
	Box						*getMapInfo();
	std::string				winScreen();
	bool					isThereAWinner();

	void					setSquareMap(std::map<int, Square*> &map);
};

#endif